package com.huhao.wshare.repository;

import com.huhao.wshare.entity.Dynamic;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

@Repository
public interface DynamicRepository extends JpaRepository<Dynamic, Long> {

    /**
     * 分页查询某个用户自己及其所有【已同意】的好友的动态。
     * 核心逻辑: 查询动态的发布者ID (d.user.id)
     * 1. 是当前用户自己 (:userId)
     * 2. 或 在当前用户的【已同意】好友列表 (f.friend.id) 中，
     *    好友关系由 f.user.id = :userId 和 f.status = 1 定义
     * 最后按创建时间倒序排列。
     */
    @Query("SELECT d FROM Dynamic d WHERE d.user.id = :userId " +
            "OR d.user.id IN (SELECT f.friend.id FROM Friends f WHERE f.user.id = :userId AND f.status = 1) " +
            "ORDER BY d.createTime DESC")
    Page<Dynamic> findFriendDynamicsByUserId(@Param("userId") Long userId, Pageable pageable);
    /**
     * 【新增】根据用户ID分页查询该用户发布的所有动态。
     * Spring Data JPA 会自动根据方法名生成查询语句。
     * @param userId 用户ID
     * @param pageable 分页和排序信息
     * @return 分页后的动态列表
     */
    Page<Dynamic> findByUserId(Long userId, Pageable pageable);
}
